#!/usr/bin/env python 
# -*- coding: utf-8 -*-  

#Вспомогательные статик-методы

def _mod(px, th):
    if px > th:
        return 255
    return 0

def make_array(x,y,val=0):
    arr = [[val]*x]
    for i in range(y):
        arr.append([val]*x)
    return arr

def make_image_array(im):
    w, h = im.size
    arr = make_array(h+2, w+2)
#    arr = [[0]*(h+2)]*(w+2)
    data = im.load()
    for j in range(h):
        for i in range(w):
            if data[i,j] == 0:
                arr[i+1][j+1] = 1
    return (arr, w, h)

def binarize(image):
    pa = image.histogram()
    # поиск 2-х максимальных значений начиная с середины (для выбора порога бинаризации)
    a1, a2 = pa[:len(pa)/2], pa[(len(pa)/2):] 
    max1, max2 = max(a1), max(a2)
    ind1, ind2 = a1.index(max1), a2.index(max2) + len(a1)
    
    # порог бинаризации 0 - уровень черного
    middle = int(abs(ind1 - ind2)/2)
    print 'middle = %d' % middle
    bin_image = image.point(lambda i: 0 if i >= middle else 255)
    return bin_image